osdevfandomcom_ru-20200214-history
6. Наборы инструкций A32 и T32
= Наборы инструкций A32 и T32 = In ARMv8 AArch32 the A32, T32 and T32EE instruction sets are broadly equivalent to the instructions sets named ARM, Thumb and ThumbEE respectively in v7A. In addition ARMv8 AArch32 includes A32 and T32 instructions and features introduced by the following ARMv7 architectural extensions: • Multiprocessing (MP) Extensions. • Large Physical Address Extension (LPAE). • Virtualization Extension (ARMv7VE), regardless of whether exception level EL2 is implemented, including the SDIV, UDIV, ERET, MRS/MSR (Banked register) and HVC instructions. • Security Extensions (ARMv6K), regardless of whether exception level EL3 is implemented, including the SMC instruction. • VFPv4-D32 or VFPv4U-D32, including half-precision floating point, and the VFMA and VFMS instructions. • Advanced SIMDv2, including half-precision floating point, and the VFMA and VFMS instructions. The following ARMv7 architectural extensions are substantially altered as part of ARMv8. В режиме AArch32 архитектуры ARMv8 наборы A32, T32 и T32EE и их функционал в целом эквивалентен наборам ARM, Thumb и ThumbEE принятым в ARMv7. Режим AArch32 включает инструкции из наборов A32 и T32 и следующие расширения ARMv7: Мультипроцессорная (MP) обработка. Длинные физические адреса (LPAE) Виртуализация (ARMv7VE), в независимости от того реализован или нет уровень EL2, включая инструкции SDIV, UDIV, ERET, MRS/MSR (сохраняемые регистры) и HVC. Расширение безопасности (ARMv6K), в независимости от того реализован или нет уровень EL3 включая инструкцию SMC. VFPv4-D32 или VFPv4U-D32, включая числа с плавающей точкой с половиной от одинарной точности, и инструкции VFMA и VFMS. Расширенный SIMDv2, включая числа с плавающей точкой с половиной от одинарной точности, и инструкции VFMA и VFMS Перечисленные ниже опциональные расширения ARMv7 теперь являются частью стандарта ARMv8. Debug v8 – is backwards compatible in AArch32 state with self-hosted (aka monitor-mode) debug software written for Debug v7.1. Optional Performance Monitors Extension (PMUv3) – is backwards compatible in AArch32 state with self- hosted software written for PMUv2. Optional Embedded Trace Macrocell (ETMv4) – is not backwards compatible with ETMv3.5 or PFTv1.1. Отладка 8-ой версии (Debug v8) - является механизмом для режима AArch32 который обратно совместим с внутренним отладчиком (self-hosted, т.е. monitor-mode) написанным для версии 7.1. Опциональный монитор производительности (PMUv3) - является механизмом для режима AArch32 который обратно совместим с внутренним монитором написанным для версии PMUv2. Опциональный встроенный чип для трассировки (Embedded Trace Macrocel - ETMv4). Обратная совместимость с ETMv3.5 или PFTv1.1 отсутствует. The following are obsoleted in ARMv8:• A32 SWP and SWPB instructions.• Jazelle (only trivial implementations are supported). • VFP short vectors and asynchronous bounces. • Fast Context Switch Extension (FCSE). The following are deprecated in ARMv8 and may be disabled by privileged software:• A32 and T32 CP15 barriers CP15DSB, CP15ISB and CP15DMB. • A32 and T32 SETEND instruction. • A subset of T32 IT instruction functionality, as described in §6.1 below. • T32EE instructions and coprocessor registers are both deprecated and optional. Следующие возможности объявлены устаревшими и не поддерживаются в ARMv8. A32 SWP and SWPB instructions. • Jazelle (поддерживается только тривиальная реализация). • Короткие векторы для VFP и асинхронные отказы (asynchronous bounces). • Быстрое переключение контекста (FCSE Fast Context Switch Extension) The following are deprecated in ARMv8 and may be disabled by privileged software:• A32 and T32 CP15 barriers CP15DSB, CP15ISB and CP15DMB.• A32 and T32 SETEND instruction.• A subset of T32 IT instruction functionality, as described in §6.1 below. • T32EE instructions and coprocessor registers are both deprecated and optional. Использование следующих возможностей в ARMv8 не желательно и может будет запрещено в будущем. Контролирующее программное обеспечение должно сообщать об этом автору программ, вплоть до запрещения. • Барьеры CP15 (CP15DSB, CP15ISB и CP15DMB) для A32 и T32. • Инструкция SETEND для A32 и T32. • Особенности использования инструкции IT для T32 описаны в гл.6.1. • Наличие инструкций и регистров сопроцессора для T32EE не желательно и их аппаратная реализация опциональна. In addition some of the new functionality provided by the A64 instruction set is independent of the general purpose register width and therefore equally applicable to AArch32 state, namely: enhanced barrier types; hints; load-acquire and store-release; new IEEE 754-2008 operations; and cryptography extensions. Accordingly these new instructions are added to the A32 and T32 instruction sets by ARMv8 as described below. Note that the existing A32 and T32 assembler syntax remains unchanged from ARMv7 UAL. The syntax term where used below represents a standard ARM condition code – mnemonics which do not include may not be conditionally executed. Кроме того, появились новые возможности предоставляемые набором инструкций A64, которые не зависят от длинны регистров общего назначения и, а значит применимые в режиме AArch32. А именно: расширенные типы барьеров; подсказки, загрузка-захват(load-acquire), сохранение-освобождение (store-release), новые операции IEEE 754-2008, расширения криптографии. Таким образом, данные инструкции добавляются в наборы A32 и T32 архитектуры ARMv8. Они будут рассмотрены подробнее далее. 6.1 Partial Deprecation of IT In conjunction with the reduction of conditionality in the A64 instruction set, and to facilitate higher performance implementations of the architecture in the future, ARMv8 deprecates some uses of the T32 IT instruction. All uses of IT that apply to other than a single subsequent 16-bit instruction from a restricted set are deprecated, as are explicit references to R15 (i.e. PC) within that single 16-bit instruction. This permits the non-deprecated forms of IT and subsequent instruction to be treated by the processor as a single 32-bit conditional instruction. The restricted set of 16-bit instructions which are not deprecated when used in conjunction with IT are as follows: Ограничение функционала инструкции IT В наборе инструкций A64 взят курс на сокращение условных инструкций и, для обеспечения возможности дальнейшего увеличения производительности архитектуры, принято решение признать нежелательным использование части инструкций IT для T32. Все варианты использования IT при которых она применяется подряд для более чем одной 16-ти битной инструкции входящих в определённый набор (см. ниже) признаны устаревшими, так же как явная ссылка на R15 (т.е. PC) внутри 16-ти битных инструкций. Изменения в архитектуре позволяют считают не устаревшим использование вариантов IT и идущих подряд инструкций, которые обрабатываются процессором как одна 32-х битная условная инструкция. Ограниченный набор 16-ти битных инструкций, которые не считаются устаревшими при использовании в связке с IT выглядит следующим образом: The IT instruction remains fully available in order to execute ARMv7 T32 code, but to verify conformance with the deprecation a new control bit permits privileged software to disable the deprecated forms of the IT instruction, causing them to generate an Undefined Instruction exception. Инструкцию IT можно использовать во всех вариантах для набора T32 совместимого с ARMv7, однако следует проверять состояние контроля устаревших инструкций - специального бита, позволяющего привилегированному программному обеспечению запретить устаревшие варианты инструкции IT, т.е. их появление в коде будет приводить к возникновению исключения "Неопределённая инструкция" (Undefined Instruction) 6.2 Load-Acquire / Store-Release These new instructions provide similar functionality to the A64 instructions described in section 5.3.7 above. Natural alignment is required in all cases, and to 8 bytes in the case of LDRAEXD and STRLEXD: an unaligned address will cause an alignment fault. Загрузка-захват / сохранение-освобождение Новые инструкции данного типа обеспечивают возможности, аналогичные инструкциям A64 описанным в гл.5.3.7. Во всех случаях требуется естественное выравнивание, а случае LDRAEXD и STRLEXD - выравнивание на 8 байт. Не выровненные адрес приведёт к ошибке сегментирования. 6.2.1 Non-Exclusive LDRA Rt, Rn{,#0} Load-Acquire Word: loads a word from memory addressed by Rn into Rt. LDRAB Rt, Rn{,#0} Load-Acquire Byte: loads a byte from memory addressed by Rn and zero-extends it into Rt. LDRAH Rt, Rn{,#0} Load-Acquire Halfword: loads a halfword from memory addressed by Rn and zero-extends it into Rt. STRL Rt, Rn{,#0} Store-Release Word: stores a word from Rt to memory addressed by Rn. STRLB Rt, Rn{,#0} Store-Release Byte: stores a byte from Rt to memory addressed by Rn. STRLH Rt, Rn{,#0} Store-Release Halfword: stores a halfword from Rt to memory addressed by Rn. Не эксклюзивные LDRA Rt, Rn{,#0} Загрузка-захват слова: загружает в Rt слово из памяти по адресу заданному в Rn. LDRAB Rt, Rn{,#0} Загрузка-захват байта: загружает в Rt байт из памяти по адресу заданному в Rn заполняя свободные биты нулями. LDRAH Rt, Rn{,#0} Загрузка-захват пуслова: загружает в Rt полуслово из памяти по адресу заданному в Rn заполняя свободные биты нулями. STRL Rt, Rn{,#0} Сохранение-освобождение слова: записывает слово из Rt в память по адресу указанному в Rn. STRLB Rt, Rn{,#0} Сохранение-освобождение байта: записывает байт из Rt в память по адресу указанному в Rn STRLH Rt, Rn{,#0} Сохранение-освобождение полуслова: записывает полуслово из Rt в память по адресу указанному в Rn. 6.2.2 Exclusive LDRAEX Rt, Rn{,#0} Load-Acquire Exclusive Word: loads a word from memory addressed by Rn into Rt. Records the physical address as an exclusive access. LDRAEXB Rt, Rn{,#0} Load-Acquire Exclusive Byte: loads a byte from memory addressed by Rn and zero-extends it into Rt. Records the physical address as an exclusive access. LDRAEXH Rt, Rn{,#0} Load-Acquire Exclusive Halfword: loads a halfword from memory addressed by Rn and zero-extends it into Rt. Records the physical address as an exclusive access. LDRAEXD Rt1, Rt2, Rn{,#0} Load-Acquire Exclusive Double: loads two words from memory addressed by base to Rt1 and Rt2. Records the physical address as an exclusive access. The register Rt1 must be an even-numbered register less than 14 and Rt2 must be R(t1+1). Эксклюзивные LDRAEX Rt, Rn{,#0} Эксклюзивная загрузка-захват слова: загружает в Rt слово из памяти по адресу заданному в Rn. Помечает адрес для эксклюзивного доступа. LDRAEXB Rt, Rn{,#0} Эксклюзивная загрузка-захват байта: загружает в Rt байт из памяти по адресу заданному в Rn заполняя свободные биты нулями. Помечает адрес для эксклюзивного доступа. LDRAEXH Rt, Rn{,#0} Эксклюзивная загрузка-захват полуслова: загружает в Rt полуслова из памяти по адресу заданному в Rn заполняя свободные биты нулями. Помечает адрес для эксклюзивного доступа. LDRAEXD Rt1, Rt2, Rn{,#0} Эксклюзивная загрузка-захват двойного слова: загружает в Rt1 и Rt2 два слова из памяти по адресу заданному в Rn заполняя свободные биты нулями. Помечает адрес для эксклюзивного доступа. Регистр Rt1 должен быть регистром общего назначение с порядковым номером меньше 14, а Rt2 можно выразить как R(t1+1). STRLEX Rd, Rt, Rn{,#0} Store-Release Exclusive: stores a word from Rt to memory addressed by Rn, and sets Rd to the returned exclusive access status. STRLEXB Rd, Rt, Rn{,#0} Store-Release Exclusive Byte: stores a byte from Rt to memory addressed by Rn, and sets Rd to the returned exclusive access status. STRLEXH Rd, Rt, Rn{,#0} Store-Release Exclusive Halfword: stores a halfword from Rt to memory addressed by Rn, and sets Rd to the returned exclusive access status. STRLEXD Rd, Rt1, Rt2, Rn{,#0} Store-Release Exclusive Double: stores two words from Rt1 and Rt2 to memory addressed by Rn, and sets Rd to the returned exclusive access status. The register Rt1 must be an even-numbered register less than 14 and Rt2 must be R(t1+1). STRLEX Rd, Rt, Rn{,#0} Эксклюзивное сохранение-освобождение слова: записывает слово из Rt в память по адресу указанному в Rn и помещает в Rd полученный статус освобождения эксклюзивного доступа. STRLEXB Rd, Rt, Rn{,#0} Эксклюзивное сохранение-освобождение байта: записывает байт из Rt в память по адресу указанному в Rn и помещает в Rd полученный статус освобождения эксклюзивного доступа. STRLEXH Rd, Rt, Rn{,#0} Эксклюзивное сохранение-освобождение полуслова: записывает полуслово из Rt в память по адресу указанному в Rn и помещает в Rd полученный статус освобождения эксклюзивного доступа. STRLEXD Rd, Rt1, Rt2, Rn{,#0} Эксклюзивное сохранение-освобождение двойного слова: записывает слово из Rt в память по адресу указанному в Rn и помещает в Rd полученный статус освобождения эксклюзивного доступа. Регистр Rt1 должен быть регистром общего назначение с порядковым номером меньше 14, а Rt2 можно выразить как R(t1+1). VFP Scalar Floating-point Floating-point Conditional Select Перевод не планируется Floating-point minNum/maxNum Перевод не планируется Floating-point Convert (floating-point to integer) Перевод не планируется Floating-point Convert (half-precision to/from double-precision) Перевод не планируется Floating-point Round to Integral Перевод не планируется Advanced SIMD Floating-Point Floating-point minNum/maxNum Перевод не планируется Floating-point Convert Перевод не планируется Floating-point Round to Integral Перевод не планируется Crypto Extension Перевод не планируется ' System Instructions Halting Debug' Системные инструкции Отладка с помощью останова New halting mode debug support instructions. Далее перечислены инструкции для поддержки нового режима отладки предусматривающего остановку выполнения. DCPS1 Debug switch to EL1 (valid in halting mode debug state only). DCPS2 Debug switch to EL2 (valid in halting mode debug state only). DCPS3 Debug switch to EL3 (valid in halting mode debug state only). HLT #uimm6 Halting mode software breakpoint: enters halting mode debug state if enabled, else treated as UNALLOCATED. With 6-bit payload in uimm6. DCPS1 Переключение процессора в состояние EL1 с целью отладки (доступно только в отладочном режиме остановки выполнения). DCPS2 Переключение процессора в состояние EL2 с целью отладки (доступно только в отладочном режиме остановки выполнения). DCPS3 Переключение процессора в состояние EL2 с целью отладки (доступно только в отладочном режиме остановки выполнения). HLT #uimm6 Программная точка останова: перехода в режим отладки с остановкой выполнения, если это разрешено, иначе инструкция обрабатывается как нестандартная (UNALLOCATED). Существует возможность передать 6-ти битный параметр uimm6. 6.6.2 Barriers and Hints New barrier options and hint instructions to match those in A64, as described in section 5.9.5. Барьеры и подсказки Далее перечисленны новые опции барьеров и инструкции подсказок которые совпадают с инструкциями A64, описанными в гл.5.9.5 DMB {ISHLD, OSHLD, NSHLD, LD} Data Memory Barrier is extended to support the new A64 Load-Load/Store options. DSB {ISHLD, OSHLD, NSHLD, LD} Data Synchronization Barrier is extended to support the new A64 Load-Load/Store options. SEVL Send Event Locally without being required to affect other processors, for example to prime a wait-loop which starts with a WFE instruction. DMB {ISHLD, OSHLD, NSHLD, LD} Барьер памяти. Расширен для поддержки новых инструкций Load-Load/Store набора A64. DSB {ISHLD, OSHLD, NSHLD, LD} Барьер синхронизации данных. Расширен для поддержки новых инструкций Load-Load/Store набора A64. SEVL Локальная отправка события. Не требует участия других процессоров, например чтобы запустить цикл ожидания, который начинается с инструкции WFE. 6.6.3 TLB Maintenance TLB maintenance operations that are only required to apply to the last level of translation table walk of the first stage of translation (consistent with the A64 TLBI operations described in section System Management5.9. above) are added to A32 and T32 as follows. Управление TLB Операции управления TLB требуются только для применения к просмотру последнего уровня таблицы трансляции относящего к первой стадии трансляции (использующемуся в связке с TLBI-операциями набора A64, описанными в гл 5.9.3). Операции управления TLB добавленные в наборы A32 и T32 выглядят следующим образом: TLBIMVALIS Related to the existing A32/T32 TLBIMVAIS operation. TLBIMVAALIS Related to the existing A32/T32 TLBIMVAAIS operation. TLBIMVALHIS Related to the existing A32/T32 TLBIMVAHIS operation. TLBIMVAL Related to the existing A32/T32 TLBIMVA operation. TLBIMVAAL Related to the existing A32/T32 TLBIMVAA operation. TLBIMVALH Related to the existing A32/T32 TLBIMVAH operation. TLBIMVALIS Связана с существующей в A32/T32 инструкцией TLBIMVAIS. TLBIMVAALIS Связана с существующей в A32/T32 инструкцией TLBIMVAAIS. TLBIMVALHIS Связана с существующей в A32/T32 инструкцией TLBIMVAHIS. TLBIMVAL Связана с существующей в A32/T32 инструкцией TLBIMVA. TLBIMVAAL Связана с существующей в A32/T32 инструкцией TLBIMVAA. TLBIMVALH Связана с существующей в A32/T32 инструкцией TLBIMVAH. TLB maintenance operations that are required to apply to individual entries from Stage 2 TLB structures, holding IPA to PA translations (consistent with the A64 TLBI system instructions described in section System Management5.9.3 above) are added to the A32 and T32 instruction sets as follows: TLBIIPAS2IS Equivalent to the A64 IPAS2E1IS operation. TLBIIPAS2LIS Equivalent to the A64 IPAS2LE1IS operation. Related to the existing A32/T32 TLBIIPAS2IS operation. TLBIIPAS2 Equivalent to the A64 IPAS2E1 operation. TLBIIPAS2L Equivalent to the A64 IPAS2LE1 operation. Related to the existing A32/T32 TLBIIPAS2 operation. Note that these new system operations are accessed via the MCR instruction or, if implemented by an assembler, using a SYS mnemonic followed by the TLBI* operation name. Операции управления TLB которые применяются для индивидуальны записей структур TLB второго уровня содержат преобразование IPA в PA (используются в связке с TLBI-операциями набора A64, описанными в гл 5.9.3). Добавленные в наборы A32 и T32 операции выглядят следующим образом: TLBIIPAS2IS Эквивалентна существующей в A64 инструкции IPAS2E1IS. TLBIIPAS2LIS Эквивалентна существующей в A64 инструкции IPAS2LE1IS. Связана с существующей в A32/T32 инструкцией TLBIIPAS2IS. TLBIIPAS2 Эквивалентна существующей в A64 инструкции IPAS2E1. TLBIIPAS2L Эквивалентна существующей в A64 инструкции IPAS2LE1. Связана с существующей в A32/T32 инструкцией TLBIIPAS2. Замете что перечисленные новые системные операции доступны с помощью инструкции MCR или, если это реализовано в ассемблере, с помощью мнемоники указываемой инструкции SYS следующей за именем операции TLBI*.